package com.ysx.oa.resume.service.impl;

import com.ysx.oa.resume.Bean.CompanyBean;
import com.ysx.oa.resume.Bean.JobBean;
import com.ysx.oa.resume.Bean.QuestionBean;
import com.ysx.oa.resume.Bean.ResumeBean;
import com.ysx.oa.resume.dao.CompanyDao;
import com.ysx.oa.resume.dao.JobDao;
import com.ysx.oa.resume.dao.QuestionDao;
import com.ysx.oa.resume.dao.ResumeDao;
import com.ysx.oa.resume.entity.CompanyEntity;
import com.ysx.oa.resume.entity.JobEntity;
import com.ysx.oa.resume.entity.ResumeEntity;
import com.ysx.oa.resume.service.ResumeService;
import com.ysx.oa.resume.utils.Utils;
import com.ysx.oa.student.service.StudentService;
import com.ysx.oa.teacher.dao.TeacherDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;

/**
 * @author 黄德标
 * @date 2021/11/22 19:44
 */
@Service
public class ResumeServiceImpl implements ResumeService {


    @Autowired
    private ResumeDao resumeDao;

    @Autowired
    private CompanyDao companyDao;

    @Autowired
    private JobDao jobDao;

    @Autowired
    private QuestionDao questionDao;

    @Autowired
    private StudentService studentService;

    @Autowired
    private TeacherDao teacherDao;


    /**
     * 方法描述: 学生 新增 履历记录
     * @author: 黄德标
     * @date: 2021/11/22 20:02
     * @return: 返回1 则新增成功，
     *          返回2 则学号不存在，
     *          返回3 则companyId不存，
     *          返回4 则jobId不存在，
     *          返回5 则学生评价内容过长，不应该超过255个字符
     *          返回6 则学生备注内容过长，不应该超过255个字符
     */
    @Override
    public int addResumeEntityByStudentId(ResumeEntity resumeEntity) {
        Integer integer = checkResumeEntityAttr(resumeEntity);
        if (integer != 1){
            return integer;
        }
        // 所有参数都合法的情况下才允许新增
        else
            return resumeDao.addResumeEntityByStudentId(resumeEntity);
    }

    /**
     * 方法描述: 根据 resumeId 删除 学生的面试记录
     * @author: 黄德标
     * @date: 2021/11/22 21:54
     * @param: [java.lang.Integer]
     * @return: 返回0 删除失败，请学生 先删除此面试记录 的所有面试问答，
     *          返回1 删除成功
     */
    @Override
    public int deleteResumeByResumeId(Integer resumeId){

        // 检查此面试履历 的面试问答 数量是否为0;
        if (0 == questionDao.selectQuestionCountByResumeId(resumeId)){
            return resumeDao.deleteResumeEntityByResumeId(resumeId);
        }else {
            return 0;
        }
    }

    /**
     * 方法描述:
     * @author: 黄德标
     * @date: 2021/11/22 22:13
     * @param: [com.ysx.oa.resume.entity.ResumeEntity]
     * @return: 返回1 校验通过，
     *          返回2 则学号不存在，
     *          返回3 则companyId不存，
     *          返回4 则jobId不存在，
     *          返回5 则学生评价内容过长，不应该超过255个字符
     *          返回6 则学生备注内容过长，不应该超过255个字符
     *          返回7 则面试记录不存在,或面试记录为空
     */
    @Override
    public int updateResumeByResumeId(ResumeEntity resumeEntity){
        // 判断 面试记录 是否存在 不存在则直接返回7
        if (null == resumeEntity.getID()){
            return 7;

        }else if (null != resumeEntity.getSTUDENT_ID()){
            // 如果学号参数不为空，则判断 该学号参数是否存在 不存在直接返回2
            if (0 == studentService.countStudentByStudentId(resumeEntity.getSTUDENT_ID())){
                return 2;
            }

        }else if (null != resumeEntity.getCOMPANY_ID()){
            // 如果公司ID不为空，则判断 该公司是否存在 不存在直接返回3
            if ( 0 == companyDao.checkCompanyByCompanyId(resumeEntity.getCOMPANY_ID())){
                return 3;
            }

        }else if (null != resumeEntity.getJOB_ID()){
            // 如果岗位ID不为空，则判断 该岗位是否存在 不存在直接返回4
            if (0 == jobDao.checkJobByJobId(resumeEntity.getJOB_ID())){
                return 4;
            }

        }else if (null != resumeEntity.getSTUDENT_APPRAISAL()){
            // 如果学生评价不为空，则判断 该学生评价长度 是否大于255个字符
            // 大于255个字符 则参数不合法返回false
            if ( ! Utils.checkStringLength1(resumeEntity.getSTUDENT_APPRAISAL())){
                return 5;
            }

        }else if (null != resumeEntity.getREMARK()){
            // 如果学生备注不为空，则判断 该学生备注长度 是否大于255个字符
            // 大于255个字符 则参数不合法返回false
            if ( ! Utils.checkStringLength1(resumeEntity.getREMARK())){
                return 6;
            }

        }else {
            resumeDao.updateResumeEntityByResumeId(resumeEntity);
        }
        return 1;
    }

    /**
     * 方法描述: 根据 resumeId 查询面试记录的所有信息
     * @author: 黄德标
     * @date: 2021/11/23 17:26
     * @param: []
     * @return: com.ysx.oa.resume.Bean.ResumeBean
     */
    @Override
    public ResumeBean selectResumeBeanByResumeId(Integer resumeId){
        ResumeEntity resumeEntity = resumeDao.selectResumeEntityByResumeId(resumeId);

        CompanyBean companyBean = companyDao.selectCompanyBeanByCompanyId(resumeEntity.getCOMPANY_ID());

        JobEntity jobEntity = jobDao.findJobEntityByJobId(resumeEntity.getJOB_ID());
        JobBean jobBean = new JobBean(jobEntity.getID(),jobEntity.getNAME());

        ArrayList<QuestionBean> questionList = questionDao.selectQuestionBeanByResumeId(resumeId);

        ResumeBean resumeBean = new ResumeBean(
                resumeId,
                resumeEntity.getSTUDENT_ID(),
                companyBean,
                jobBean,
                resumeEntity.getDATE(),
                questionList,
                resumeEntity.getSTUDENT_APPRAISAL(),
                resumeEntity.getREMARK()
        );
        return resumeBean;
    }



    /**
     * 方法描述: 根据 ResumeId 查询面试记录
     * @author: 黄德标
     * @date: 2021/11/21 19:07
     * @params: [resumeId]
     * @returns: ResumeEntity实体
     */
    @Override
    public ResumeEntity selectResumeEntityByResumeId(Integer resumeId) {
        return resumeDao.selectResumeEntityByResumeId(resumeId);
    }

    /**
     * 方法描述: 根据 studentId 查询 此学生 所有面试记录
     * @author: 黄德标
     * @date: 2021/11/21 19:23
     * @params: [studentId]
     * @returns: ResumeEntity对象的集合
     */
    @Override
    public ArrayList<ResumeEntity> selectResumeEntityByStudentId(Integer studentId){
        return resumeDao.selectResumeEntityByStudentId(studentId);
    }

    /**
     * 方法描述: 根据 studentId 查询 此学生 所有面试记录
     * @author: 黄德标
     * @date: 2021/11/21 19:23
     * @params: [studentId]
     * @returns: ResumeBean对象的集合
     */
    @Override
    public ArrayList<ResumeBean> selectResumeBeanByStudentId(Integer studentId) {
        ArrayList<ResumeEntity> resumeEntities = resumeDao.selectResumeEntityByStudentId(studentId);
        ArrayList<ResumeBean> resumeBeanArrayList = new ArrayList<>();
        for (ResumeEntity resumeEntity : resumeEntities) {

            CompanyBean companyBean
                    = companyDao.selectCompanyBeanByCompanyId(resumeEntity.getCOMPANY_ID());

            JobBean jobBean =
                    jobDao.selectJobBeanByJobId(resumeEntity.getJOB_ID());

            ArrayList<QuestionBean> questionBeanArrayList
                    = questionDao.selectQuestionBeanByResumeId(resumeEntity.getID());

            ResumeBean resumeBean = new ResumeBean(
                    resumeEntity.getID(),
                    resumeEntity.getSTUDENT_ID(),
                    companyBean,
                    jobBean,
                    resumeEntity.getDATE(),
                    questionBeanArrayList,
                    resumeEntity.getSTUDENT_APPRAISAL(),
                    resumeEntity.getREMARK());
            resumeBeanArrayList.add(resumeBean);
        }
        return resumeBeanArrayList;
    }

    @Override
    public ArrayList<ResumeBean> findResumeByTeacherId(Integer teacherId) {
        Integer classId = teacherDao.findClazzIdByTeacherId(teacherId);
        ArrayList<ResumeEntity> resumeEntities = selectResumeEntityByClassId(classId);
        ArrayList<ResumeBean> resumeBeanArrayList = new ArrayList<>();
        for (ResumeEntity resumeEntity : resumeEntities) {

            CompanyBean companyBean
                    = companyDao.selectCompanyBeanByCompanyId(resumeEntity.getCOMPANY_ID());

            JobBean jobBean =
                    jobDao.selectJobBeanByJobId(resumeEntity.getJOB_ID());

            ArrayList<QuestionBean> questionBeanArrayList
                    = questionDao.selectQuestionBeanByResumeId(resumeEntity.getID());

            ResumeBean resumeBean = new ResumeBean(
                    resumeEntity.getID(),
                    resumeEntity.getSTUDENT_ID(),
                    companyBean,
                    jobBean,
                    resumeEntity.getDATE(),
                    questionBeanArrayList,
                    resumeEntity.getSTUDENT_APPRAISAL(),
                    resumeEntity.getREMARK());
            resumeBeanArrayList.add(resumeBean);
        }
        return resumeBeanArrayList;
    }

    /**
     * 方法描述: 根据 classId 查询 此班级所有学生的 所有面试记录
     * @author: 黄德标
     * @date: 2021/11/21 19:38
     * @params: [classId]
     * @returns: ResumeEntity对象的集合
     */
    public ArrayList<ResumeEntity> selectResumeEntityByClassId(Integer classId){
        return resumeDao.selectResumeEntityByClassId(classId);
    }

    /**
     * 方法描述: 根据 companyId 查询 此公司面试过的学生 的所有面试记录
     * @author: 黄德标
     * @date: 2021/11/21 19:38
     * @params: [companyId]
     * @returns: ResumeEntity对象的集合
     */
    public ArrayList<ResumeEntity> selectResumeEntityByCompanyId(Integer companyId){
        return resumeDao.selectResumeEntityByCompanyId(companyId);
    }

    /**
     * 方法描述: 根据 传入的ResumeEntity对象的 STUDENT_ID、COMPANY_ID、JOB_ID、DATE属性
     *          进行筛选符合要求的 面试履历记录
     * @author: 黄德标
     * @date: 2021/11/21 20:04
     * @params: [resumeEntity]
     * @returns: ResumeEntity对象的集合
     */
    public ArrayList<ResumeEntity> selectResumeEntityByResumeEntity(ResumeEntity resumeEntity){
        return resumeDao.selectResumeEntityByResumeEntity(resumeEntity);
    }


    /**
     * 方法描述: 将 传入的resumeEntity对象 进行属性校验
     * @author: 黄德标
     * @date: 2021/11/23 14:44
     * @param: [com.ysx.oa.resume.entity.ResumeEntity]
     * @return: 返回1 校验通过，
     *          返回2 则学号不存在，
     *          返回3 则companyId不存，
     *          返回4 则jobId不存在，
     *          返回5 则学生评价内容过长，不应该超过255个字符
     *          返回6 则学生备注内容过长，不应该超过255个字符
     */
    @Override
    public Integer checkResumeEntityAttr(ResumeEntity resumeEntity){
        // 检查studentId是否存在
        if(0 == studentService.countStudentByStudentId(resumeEntity.getSTUDENT_ID())){
            return 2;
        }
        // 检查companyId是否存在
        if (0 == companyDao.checkCompanyByCompanyId(resumeEntity.getCOMPANY_ID())){
            return 3;
        }
            // 检查jobId是否存在
        else if (0 == jobDao.checkJobByJobId(resumeEntity.getJOB_ID())){
            return 4;
        }
            // 检查学生评价内容是否过长（不超过255个字符）
        else if ( ! Utils.checkStringLength1(resumeEntity.getSTUDENT_APPRAISAL())){
            return 5;
        }
            // 检查学生备注内容是否过长（不超过255个字符）
        else if ( ! Utils.checkStringLength1(resumeEntity.getREMARK())){
            return 6;
        }
            // 所有参数均通过校验
        else {
            return 1;
        }
    }

    /**
     * 方法描述:
     * @author: 黄德标
     * @date: 2021/11/23 15:20
     * @param: [java.lang.Integer]
     * @return: 返回1 则不存在
     * 返回0 则存在
     */
    @Override
    public boolean checkResumeIsNull(Integer resumeId) {
        Integer rs = resumeDao.checkResumeIdIsNull(resumeId);
        if (rs == 0){
            // rs == 0,则resumeId不存在
            return true;
        }else{
            // rs != 0,则resumeId存在
            return false;
        }
    }




}